/**
 * \file solve.h
 * \version 0.25
 *
 */

#ifndef SOLVE__H__
#define SOLVE__H__

#include "grille.h"
#include "check.h"

/**
 * \brief Saute à la prochaine case non fixée
 * \param g Grille de jeu
 * \param i l'index de la case actuelle
 * \return index de la prochaine case non fixée
 */
unsigned char Snext(grille g, unsigned char i);

/**
 * \brief Reviens à la précédente case non fixée
 * \param g Grille de jeu
 * \param i l'index de la case actuelle
 * \return index de la précédente case non fixée
 */
unsigned char Sprev(grille g, unsigned char i);

/**
 * \brief Incrémente le nombre de la case d'index i
 * \param g Grille de jeu
 * \param i l'index de la case
 * \return 0 si on a dépassé 9 (la case est alors remise à 0), 1 si on a pu incrémenter
 */
unsigned char Sincr(grille g, unsigned char i);

/**
 * \brief Résoud la grille
 * \param g Grille de jeu
 * Cette fonction résoud la grille par une méthode
 * de brute force
 */
void SsolveGrid(grille g);

/**
 * \brief Fonction pour résoudre la grille par brute force
 * \param g Grille de jeu
 * \param i l'index de la case actuelle
 * Cette fonction est destiné à résoudre la grille de manière récursive.
 * Elle provoque un dépassement de la mémoire de la calculatrice
 */
void SsolveRec(grille g, unsigned char i);

/**
 * \brief Fonction pour résoudre la grille par brute force
 * \param g Grille de jeu
 * \param i l'index de la case actuelle
 * Cette fonction est destiné à résoudre la grille de manière itérative.
 */
void SsolveIter(grille g, unsigned char i);

#endif

